home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 11 / Cream of the Crop 11-2.iso / os2 / rsynth1.zip / darray.h < prev    next >
C/C++ Source or Header  |  1994-11-08  |  1KB  |  47 lines

  1. /* $Id: darray.h,v 1.13 1994/11/08 13:30:50 a904209 Exp a904209 $
  2. */
  3. #if !defined(DARRAY_H)
  4. #define DARRAY_H
  5. typedef struct
  6.  {char     *data;          /* the items */
  7.   unsigned items;          /* number of slots used */
  8.   unsigned alloc;          /* number of slots allocated */
  9.   unsigned short esize;    /* size of items */
  10.   unsigned short get;      /* number to get */
  11.  } darray_t, *darray_ptr;
  12.  
  13. /* return pointer to nth item */
  14. extern void *Darray_find PROTO((darray_t *a,unsigned n));
  15. /* delete nth item */
  16. extern int darray_delete PROTO((darray_t *a,unsigned n));
  17. extern void darray_free  PROTO((darray_t *a));
  18.  
  19. #if defined(__GNUC__)
  20. static inline void darray_init(darray_t *a,unsigned size,unsigned get)
  21. {
  22.  a->esize = size;
  23.  a->get   = get;
  24.  a->items = a->alloc = 0;
  25.  a->data = NULL;
  26. }
  27.  
  28. static inline void *darray_find(darray_t *a,unsigned n)
  29. {
  30.  if (n < a->alloc && n < a->items)
  31.   return (void *) (a->data + n * a->esize);
  32.  return Darray_find(a,n);
  33. }
  34. #else
  35.  
  36. #define darray_init(a,sz,gt) \
  37.  ((a)->esize = (sz), (a)->get = (gt), (a)->items = (a)->alloc = 0, (a)->data = NULL)
  38.  
  39. #define darray_find(a,n) \
  40.  (((n) < (a)->alloc && (n) < (a)->items) \
  41.    ? (void *) ((a)->data + (n) * (a)->esize)  \
  42.    : Darray_find(a,n))
  43.  
  44. #endif 
  45. #endif
  46.  
  47.